草庐IT

MySQL Workbench 符号引用

全部标签

c++ - 有没有一种有效的方法来引用常量而不是只读常量?

让我们看一下下面的C++代码:#includeintmain(){intz=2;classA{public:constint&x;A(constint&x):x(x){}voidshow(){std::coutx程序打印:2和3它清楚地表明,虽然Ax类内部无法修改,但它仅表示它是只读的,因为我可以从外部更改它的值。当然,我可以将它作为一个拷贝存储在A类中,但我想知道是否有(或者是否有建议?)对A类说成员x将真正保持不变的方法只是只读的,意味着promise外部代码不会改变它?在我看来,它看起来与Crestrict的含义有关。关键字,但我还没有听说过任何此类C++功能。你呢?

c++ - 按值或引用抛出异常

来自这个答案https://stackoverflow.com/a/36738405/4523099:Athrow-expressionwithnooperandrethrowsthecurrentlyhandledexception.Theexceptionisreactivatedwiththeexistingtemporary;nonewtemporaryexceptionobjectiscreated.--ISO/IEC14882:2011Section15.1par.8那么为什么我会从这段代码中得到这个结果?代码:#includeclassmy_exception:publi

c++ - 如果在内联函数中使用alloca在堆栈上分配了一个变量,那么在内联函数返回后它的引用是否有效?

我知道编译器可能,而不是应该将内联函数展开到调用函数中,以避免与调用out-of相关的开销-行功能。不过,我也知道inline函数的链接方式与out-of-line函数不同,因此我不能指望它们以完全相同的方式运行。虽然我实际上使用的是C++,但我正在开发一个使用api的程序,在其中可以方便地使用类似于以下内容的C宏:#definefunc_alloca(ptr)do{*ptr=alloca(size);memset(*ptr,0,size);}为了不在不同的函数中多次重复代码,如果能够将一系列这些alloca调用功能化,对我来说会很有用。我的问题是,(特别是在gcc中,因为alloca

c++ - 引用内存中的数组

这个问题在这里已经有了答案:Isitlegaltocastapointertoarrayreferenceusingstatic_castinC++?(2个答案)关闭6年前。我有这样的内存布局:0018FBD2????????????????0018FBDAAAAAAAAABBBBBBBB在C中,我会这样做:int*my_array=(int*)0x18FBDA;my_array[0];//access但是,我使用的是C++,我想声明一个引用:int(&my_array)[2]=(???)0x18FBDA;为了像这样使用:my_array[0];//access但是如你所见,我不知道如

c++ - 为什么右值引用会被通用引用变成左值引用

我想当通用引用参数与右值引用参数匹配时,将返回右值引用参数。然而,我的测试表明右值引用被通用引用函数模板变成了左值引用。为什么会这样?#include#includeusingnamespacestd;templateTf1(T&&t){//::value::value::value::value::value::value在GCC和VC++2010中,都是这样的结果:f2is_lvaluereference:0f2is_rvaluereference:1f2is_reference:1is_lvaluereference:1is_rvaluereference:0is_referen

c++ - 通过引用返回一个 unique_ptr

所以我已经解决了这个问题,但如果我所做的是最佳实践,我需要你的意见。一个简单的类包含unique_ptrs的vector订购元素。我会解释成员变量null_unique以下。classorder_collection{typedefstd::unique_ptrord_ptr;typedefstd::vectorord_ptr_vec;ord_ptr_vecorders;ord_ptrnull_unique;public:...constord_ptr&find_order(std::string);....所以我需要这个类的用户来访问订单unique_ptr如果找到。但是我不会将对象

c++ - Lambda 和映射,通过引用传递参数 - 编译错误

我试图将我的问题缩小到一个最小的例子:#include#include#include#includeintmain(){std::vectorresult;std::map>>other;if(true){std::for_each(other.begin(),other.end(),[&](std::pair>>&data){result.insert(result.end(),data.second.second.begin(),data.second.second.end());});}return0;}我得到一个编译器错误:errorC2664:'voidmain::::op

c++ - 通过 constness 从结构传递到它的指针和引用成员

我有一个带有指针的结构。我想这样做,如果一个结构实例是常量,那么它的指针的内容就不能被修改。structFoo{};structBar{Foo/*constgoeshereif`constBar`*/*foo;};voidf(Bar&bar){*bar.foo=Foo();//OK}voidg(constBar&bar){*bar.foo=Foo();//OK-butshouldbeerror}有没有办法将常量从结构传递到它的指针和引用成员? 最佳答案 封装来拯救!只需通过接口(interface)编码访问:structBar{Fo

c++ - 为什么我们必须在箭头符号( -> )之后再次指定数据类型

auto可以推导出返回类型那么为什么我们需要尾部箭头符号(->)来推导出返回类型#includeautoadd(inti,intj)->int{returni+j;}intmain(){intx=10,y=20;std::cout 最佳答案 在C++11中,函数没有返回类型推导。auto不是这里推导的占位符类型。你可以说它的意义重载了。对于函数,auto只是意味着返回类型将被指定为尾随返回类型。你不能省略尾随返回,否则你的程序将是错误的。此功能已添加到语言中,以允许返回类型规范取决于函数参数或成员的封闭类。在达到尾随返回类型时,这些

c++ - 右值引用或转发引用?

我知道对于下面的函数templatevoiddo_something(T&&arg);函数参数是转发引用。但是在下面的情况下它仍然是转发引用还是右值引用?templateclassMyClass{voiddo_something(T&&arg);};我认为它仍然是转发引用,但我不确定。此外,我想知道如果结果不是我想要的,可以做什么来强制执行右值引用或转发引用。 最佳答案 这是一个右值引用。转发引用只能出现在推导的上下文中。这只是一个成员函数,它接受对class模板参数的右值引用。如果要维护函数的模板参数推导,则不能强制转发引用为右值